////拷贝赋值函数
//#include <iostream>
//#include <cstring>
//
//using namespace std;
//
//class A {
//public:
//
//
//    A(int i = 0) {//增加缺省值
////        int m_i;
//        m_i = i;
//    }
//
//private:
//    int m_i;
//};
//
//class Human {
//public:
//    //如果类没有提供任何构造函数，编译器将提供一个无参构造函数
//    /*Human() {
//        //在this指针指向的内存空间中，定义m_age,初值为随机数
//        //在this指针指向的内存空间中，定义m_name，利用m_name.string()
//    }*/
//    Human(int age = 0, const char *name = "匿名") {
//        //在this指针指向的内存空间中，定义m_age,初值为随机数
//        //在this指针指向的内存空间中，定义m_name，利用m_name.string()
//        cout << "Human类的缺省构造函数被调用" << endl;
//
//    }
//
//    //如果类没有提供拷贝构造函数，编译器将提供一个默认的拷贝构造函数
////    Human(Human &that) {
////        //...[int m_age = that.m_age;]定义m_age,初值为that.m_age
////        //[string m_name = that.m_name;]定义m_name，初值为that.m_name，利用m_name.string(that.m_name)
////
////    }
//    //自定义拷贝构造函数
//    Human(const Human &that) {
//        cout << "Human类的拷贝函数被调用" << endl;
//        m_name = that.m_name;
//    }
//
//    //如果类没有提供拷贝赋值函数，编译器将提供一个默认的拷贝赋值函数
////    Human &operator=(const Human &that) {
////        this->m_age = that.m_age;
////        this->m_name = that.m_name;//this->m_name.operator=(that.m_name)
////        //--->string类的拷贝赋值
////        return *this;
////    }
//    Human &operator=(const Human &that) {
//        //编译器不会在自定义拷贝赋值函数中添加任何操作
//        cout << "拷贝赋值函数被调用" << endl;
//        this->m_age = that.m_age;
//        this->m_name = that.m_name;//this->m_name.operator=(that.m_name)
//        return *this;
//    }
//
//
//    void getInfo() {
//        cout << "姓名" << this->m_name << "年龄:" << this->m_age << endl;
//    }
//
//private:
//    int m_age;//基本类型的成员变量
//    string m_name;//类类型的成员变量
//    A m_a;//类类型的成员变量
//};
//
//int main(void) {
//    cout << "-------------------h创建的信息--------------------" << endl;
//    Human h;//定义h,利用h.Human() h维护的内容（空串、随机数）
//    h.getInfo();
//    cout << "-------------------h2创建的信息--------------------" << endl;
//
//    Human h2(22, "张飞");//定义h2,利用h2.Human(22,"张飞");
//    h2.getInfo();
//    cout << "-------------------h3创建的信息--------------------" << endl;
//    Human h3(h2);//=h2；的定义h3,利用h3.Human(h2)
//    h3.getInfo();
//
//    cout << "-------------------h4创建的信息--------------------" << endl;
//    Human h4;//定义h4,利用h4.Human()-->h4维护的内容（匿名,0）
//    cout << "h4被赋值前---:";
//    h4.getInfo();
//    h4 = h3;
//    cout << "h4被赋值后---:";
//    h4.getInfo();
//
//    return 0;
//}
//
